package com.uzai.console.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.uzai.common.entity.WechatUser;
import com.uzai.common.entity.WxpubUser;
import com.uzai.common.entity.WxworkUser;
import com.uzai.console.dto.user.wxpubuser.WxpubUserQuery;
import com.uzai.console.vo.user.wechatuser.MinMaxCreateTimeVo;
import com.uzai.console.vo.user.wxpubuser.WxpubUserTotalVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

@Repository
public interface WxpubUserMapper {
    int deleteById(@Param("id") Long id, @Param("merId") Long merId);

    int insert(WxpubUser record);

    WxpubUser selectById(@Param("id") Long id, @Param("merId") Long merId);

    WxpubUser selectByUzaiUnionId(@Param("uzaiUnionId") String uzaiUnionId, @Param("merId") Long merId);

    WxpubUser selectByBizUserId(@Param("bizUserId") String bizUserId, @Param("merId") Long merId);

    int updateById(WxpubUser record);

    int updateByIdSelective(WxpubUser record);

    /**
     * 分页查询
     * @param page
     * @param query
     * @return
     */
    ArrayList<WxpubUser> findByList(Page<WxpubUser> page, @Param("query") WxpubUserQuery query);

    /**
     * 查询所有
     * @param query
     * @return
     */
    ArrayList<WxpubUser> findByList(@Param("query") WxpubUserQuery query);

    /**
     * 查询最小和最大创建时间
     * @param query
     * @param query
     * @return
     */
    MinMaxCreateTimeVo findMinAndMaxCreateTime(@Param("query") WxpubUserQuery query);

    /**
     * 查询总数
     * @param query
     * @param query
     * @return
     */
    Integer findCount(@Param("query") WxpubUserQuery query);

    /**
     * 查询所有用户余额总和
     * @param query
     * @return
     */
    WxpubUserTotalVo findTotalBalance(@Param("query") WxpubUserQuery query);

    /**
     * 批量删除（假删除-设置is_delete = 1)
     * @param list
     * @return
     */
    int batchDelete(List<Long> list);

    /**
     * 修改账号余额
     * @param record
     * @return
     */
    int updateBalance(WxpubUser record);

    /**
     * 精准查找微信用户通过用户信息（用户ID、微信昵称、支付宝账号）
     * @param userinfo
     * @return
     */
    WxpubUser selectByUserInfo(String userinfo);

    /**
     * 修改备注
     * @param record
     * @return
     */
    int updateRemark(WxpubUser record);

    /**
     * 修改备注和标签
     * @param record
     * @return
     */
    int updateRemarkAndTags(WxpubUser record);

    /**
     * 修改备注和标签
     * @param record
     * @return
     */
    int updateSysTags(WxpubUser record);

    /**
     * 修改身份信息
     * @param record
     * @return
     */
    int updateIdentityInfo(WxpubUser record);

    /**
     * 批量替换上级树
     * @param merId
     * @return
     */
    int batchUpdateParentInfo(@Param("parentInfoOld") String parentInfoOld, @Param("parentInfoNew") String parentInfoNew, @Param("merId") Long merId, @Param("underline") boolean underline);

    /**
     * 批量替换代理树
     * @param merId
     * @return
     */
    int batchUpdateAgentInfo(@Param("agentInfoOld") String agentInfoOld, @Param("agentInfoNew") String agentInfoNew, @Param("merId") Long merId, @Param("underline") boolean underline);

    /**
     * 批量修改所有代理为空的代理信息 通过买家树匹配
     * @param id
     * @return
     */
    int batchUpdateAgentInfoFromParentInfo(@Param("id") Long id, @Param("agentInfo") String agentInfo, @Param("merId") Long merId);

    /**
     * 批量修改所有合伙人为空的合伙人信息 通过买家树匹配
     * @param id
     * @return
     */
    int batchUpdatePartnerInfoFromParentInfo(@Param("id") Long id, @Param("merId") Long merId);

    /**
     * 批量修改所有合伙人为空的下级会员的合伙人 通过代理树匹配
     * @param id
     * @return
     */
    int batchUpdatePartnerIdFromAgentInfo(@Param("id") Long id, @Param("merId") Long merId);

    /**
     * 修改定向比例
     * @param record
     * @return
     */
    int updatePriRewardRules(WxpubUser record);

    /**
     * 修改公众号机器人
     * @param record
     * @return
     */
    int updateDevice(WxpubUser record);

    /**
     * 修改订阅信息
     * @param record
     * @return
     */
    int updateSubscribeInfo(WxpubUser record);
}